package br.com.screen;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UIManager.*;

/**
 *
 * @author joaopau1o
 * @author netobeans
 */
public class ScreenConversa extends JFrame {
    
    JTextField campoMensagem;
    Socket socket;
    PrintWriter escritor;
    Scanner leitor;
    String nome;
    JTextArea textoRecebido;
    
    public ScreenConversa(String nome) {
        
        super ("Conversa");
        
        this.nome = nome;
        
        /* Criando os campos da janela */
        
        campoMensagem = new JTextField();
        JButton botaoEnviar = new JButton("Enviar");
        botaoEnviar.addActionListener(new ScreenConversa.EnviarTexto());
        getRootPane().setDefaultButton(botaoEnviar);
        textoRecebido = new JTextArea();
        textoRecebido.setEditable(false);
        textoRecebido.setLineWrap(true);
        JScrollPane scroll = new JScrollPane(textoRecebido);
        JMenuBar menuBar = BarraDeMenu.Instance();
         
        
        Container envio = new JPanel();
        envio.setLayout(new BorderLayout());
        
        envio.add(BorderLayout.CENTER, campoMensagem);
        envio.add(BorderLayout.EAST, botaoEnviar);
        
        getContentPane().add(BorderLayout.SOUTH, envio);
        getContentPane().add(BorderLayout.CENTER, scroll);
        
        conectaServidor();
        
        setJMenuBar(menuBar);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setSize(400, 400);
        setVisible(true);
    }
    
    
    
    
    public void conectaServidor() {
        try {
            
            socket = new Socket("127.0.0.1", 5000); // Definindo o IP e a porta de conexão com o servidor //
            escritor = new PrintWriter(socket.getOutputStream()); // Dados enviados para o servidor //
            leitor = new Scanner(socket.getInputStream()); // Dados recebidos do servidor //
            new Thread(new ScreenConversa.RecebeServidor()).start();
            
        } catch (UnknownHostException ex) {
            
        	JOptionPane.showMessageDialog(null, "Não foi possível conectar.\nVerifique se o IP do servidor está correto");
            //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
            
            
        } catch (IOException ex) {
            
        	JOptionPane.showMessageDialog(null, "As informações não foram enviadas");
            //Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }       
    }
    
    private class EnviarTexto implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            /* Enviando a mensagem para o servidor */
        	escritor.println(nome + ": " + campoMensagem.getText());
            escritor.flush();
            campoMensagem.setText("");
            campoMensagem.requestFocus();
        }        
    }
    
    private class RecebeServidor implements Runnable {

        @Override
        public void run() {
            try {
                /* Recebendo mensagens do servidor */
            	String texto;
                while((texto = leitor.nextLine()) != null){
                    textoRecebido.append(texto + "\n");
                    textoRecebido.setCaretPosition(textoRecebido.getDocument().getLength()); /* Coloca a barra de rolagem no final */
                }
            } catch (Exception e) {}
        }      
    }
    
    
    public static void main(String[] args) {
    	try {
        	/* Alterando a skin da UI */
    		for(LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        		if ("Nimbus".equals(info.getName())) {
        			UIManager.setLookAndFeel(info.getClassName());
        		}
        	}
        } catch (Exception e) {}
    }    
}
